// 1. 导入axios
import axios from "axios";
import store from "../store";

const instance = axios.create({
  baseURL: process.env.VUE_APP_URL2,
});

// 请求拦截器
instance.interceptors.request.use(
  function (config) {
    // config 对应的ajax请求构建的请求配置(url,method,data,……)
    console.log(config);
    // 业务 => 增加授权请求头
    console.log("请求拦截器");
    if (!config.isPublic) {
      config.headers.Authorization = store.state.token;
    }

    return config;
  },
  function (error) {
    // 请求错误的处理
    alert("请求失败");
    return Promise.reject("请求失败");
  }
);

// 响应拦截器【请求向组件真实返回结果前，额外处理的函数】
instance.interceptors.response.use(
  function (response) {
    // response 就是请求成功后被 axios 包装的请求状态对象
    //    response : { data,status,…… }
    // 请求成功响应的拦截方法
    console.log("响应成功拦截器");
    if (response.data.code != 200) {
      alert("业务错误" + response.data.msg);
      return Promise.reject(response.data.msg);
    }
    // 直接返回处理后的服务器响应数据
    return response.data;
  },
  function (error) {
    // 请求失败响应的拦截方法
    console.log("响应失败拦截器", error);
    // 统一错误处理
    alert("请求失败");
    return Promise.reject("请求失败"); // 返回一个失败状态的Promise
  }
);

export default function (options = {}) {
  let method = options.method.toLocaleLowerCase();
  if (method == "post" || method == "put" || method == "patch") {
    options.data = options.params;
    options.params = {};
  }
  options.headers = {
    ...options.headers,
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  };
  return instance.request(options);
}
